// 这个模块的目的是确保ramdisk.o被链接到内核中
// 我们通过声明外部符号来引用.initrd段的开始和结束地址

/// ramdisk段的起始地址
#[unsafe(no_mangle)]
unsafe extern "C" {
    pub static _sinitrd: u8;
}

/// ramdisk段的结束地址
#[unsafe(no_mangle)]
unsafe extern "C" {
    pub static _einitrd: u8;
}

/// 获取ramdisk的大小
pub fn ramdisk_size() -> usize {
    unsafe { &_einitrd as *const u8 as usize - &_sinitrd as *const u8 as usize }
}

/// 检查ramdisk是否为空
pub fn has_ramdisk() -> bool {
    ramdisk_size() > 0
}

/// 初始化函数，在启动时调用以确保ramdisk被链接
pub fn init() {
    // 这里的代码不会实际执行，但会确保符号被引用
    if cfg!(feature = "driver-ramdisk") {
        // 简单地读取这些符号的地址，确保它们被链接器保留
        let _ = unsafe { &_sinitrd as *const u8 };
        let _ = unsafe { &_einitrd as *const u8 };
    }
}